﻿using System;
using System.Collections.Generic;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Net;
using System.IO;
using WLMCoreLibrary;
using MiWebSite_Core;

namespace MWS_AddDirectory.handlers.dineromail
{
    public partial class Default : System.Web.UI.Page
    {
        public dbConnector ConexionDB;
        public WebSiteMainConfiguration config;
        protected void Page_Load(object sender, EventArgs e)
        {
            config = WebSiteMainConfiguration.GetConfig();
            if (Request["NOTIFICACION"] != null)
            {
                XmlDocument consultaNotificacion;
                consultaNotificacion = ProcesarNotificacion(Request["NOTIFICACION"]);
                //Response.Write(consultaNotificacion.InnerXml);
                ActualizarStatusAnuncios(consultaNotificacion);
            }
        }



        protected XmlDocument ProcesarNotificacion(string xmlNotificacion)
        {

            //Response.ContentType = "text/xml";
            XmlDocument notificacion = new XmlDocument();
            XmlDocument consulta = new XmlDocument();
            consulta.LoadXml("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><REPORTE>" +
                "<NROCTA>0298812</NROCTA>" +
                "<DETALLE><CONSULTA>" +
                "<CLAVE>thebadtouch123</CLAVE>" +
                "<TIPO>1</TIPO><OPERACIONES></OPERACIONES></CONSULTA></DETALLE></REPORTE>");
            notificacion.LoadXml(xmlNotificacion);


            foreach (XmlNode operacion in notificacion.GetElementsByTagName("OPERACION"))
            {
                XmlNode nodoOperacion = consulta.CreateNode(XmlNodeType.Element, "OPERACION", "");
                nodoOperacion.InnerText = operacion["ID"].InnerText;
                consulta.GetElementsByTagName("OPERACIONES")[0].AppendChild(nodoOperacion);// );
            }


            string lcUrl = "http://mexico.dineromail.com/vender/Consulta_IPN.asp";
            HttpWebRequest loHttp =
               (HttpWebRequest)WebRequest.Create(lcUrl);

            // *** Send any POST data
            string lcPostData =
               "data=" + HttpUtility.UrlEncode(consulta.InnerXml);

            loHttp.Method = "POST";
            loHttp.ContentType = "application/x-www-form-urlencoded";
            byte[] lbPostBuffer = System.Text.
                                   Encoding.GetEncoding(1252).GetBytes(lcPostData);
            loHttp.ContentLength = lbPostBuffer.Length;

            Stream loPostData = loHttp.GetRequestStream();
            loPostData.Write(lbPostBuffer, 0, lbPostBuffer.Length);
            loPostData.Close();

            HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse();

            System.Text.Encoding enc = System.Text.Encoding.GetEncoding(1252);

            StreamReader loResponseStream =
               new StreamReader(loWebResponse.GetResponseStream(), enc);

            XmlDocument docSalida = new XmlDocument();
            docSalida.LoadXml(loResponseStream.ReadToEnd());

            loWebResponse.Close();
            loResponseStream.Close();
            return docSalida;
        }

        protected void ActualizarStatusAnuncios(XmlDocument consultaXML)
        {
            ConexionDB = new dbConnector(config.Connections["WebSite"].value);
            Response.ContentType = "text/xml";
            try
            {
                
                SuccessObject sucess = new SuccessObject();
                sucess.Message = "ActualizacionCompletada";
                sucess.Code = SuccessCode.RegistryUpdated;
                List<AnuncioTransaccion> listaTransacciones = new List<AnuncioTransaccion>();
                foreach (XmlNode operacion in consultaXML.GetElementsByTagName("OPERACION"))
                {
                    AnuncioTransaccion transaccion = new AnuncioTransaccion(Convert.ToInt32(operacion["ID"].InnerText), ref ConexionDB);
                    Anuncio anuncio = new Anuncio(transaccion.idAnuncio, ref ConexionDB);

                    Cliente cliente = new Cliente(transaccion.idCliente, ref ConexionDB);
                    anuncio.cliente = cliente;
                    transaccion.Anuncio = anuncio;
                    if (operacion["ESTADO"].InnerText == "1" && transaccion.status!=2)
                    {
                        int diasPagados = Convert.ToInt32(operacion["MONTO"].InnerText);
                        if (anuncio.PagadoHasta < DateTime.Now)
                            anuncio.PagadoHasta = DateTime.Now.AddDays(diasPagados);
                        else
                            anuncio.PagadoHasta = anuncio.PagadoHasta.AddDays(diasPagados);
                        anuncio.idTipoAnuncio = 2;
                        anuncio.Save();
                        transaccion.status = 2;
                        transaccion.fechaRealizacion = Convert.ToDateTime(operacion["FECHA"].InnerText);
                        transaccion.Save();
                        string cuerpoEmail = WLMFunctions.TransformXML(transaccion, "http://www." + DeCurrentDomain.DomainName + "/xsl/Templates/Pagos/PagoRecibido.xslt");
                        cliente.FechaUltimoPago = transaccion.fechaRealizacion;
                        cliente.Save();
                        anuncio.video= FuncionesDirectorio.EnviarEmail("info@" + DeCurrentDomain.DomainName,
                            DeCurrentDomain.DomainName,
                            cliente.email,
                            cliente.Nombre + " " + cliente.Apellidos,
                            "Pago de Anuncio Recibido", cuerpoEmail);
                        listaTransacciones.Add(transaccion);
                    }

                }                
                XmlDocument transaccionesXML=WLMFunctions.SerializeObject(listaTransacciones);
                sucess.Object = transaccionesXML;
                try
                {
                    string EmailReporte = WLMFunctions.TransformXML(transaccionesXML, "http://www." + DeCurrentDomain.DomainName + "/xsl/Templates/Pagos/ReporteTransacciones.xslt");
                    FuncionesDirectorio.EnviarEmail("info@" + DeCurrentDomain.DomainName,
                                DeCurrentDomain.DomainName,
                                "info@" + DeCurrentDomain.DomainName,
                                DeCurrentDomain.DomainName,
                                "Rerporde Transacciones Diarias", EmailReporte);
                }
                catch (Exception ex)
                {
                }
                Response.Write(WLMFunctions.SerializeObject(sucess, true));
            }
            catch (Exception ex)
            {
                ErrorObject error = new ErrorObject(ErrorCode.PaymentError, ex.Message, ex.Message, ex.StackTrace);
                Response.Write(WLMFunctions.SerializeObject(error, true));
            }
            ConexionDB.CloseConnection();
            Response.End();
        }

    }
}